#ifndef		__ENTITY_Visitor_INTERFACE__
#define		__ENTITY_Visitor_INTERFACE__

#include "Entry/LibExportCom.h"

class EntityP;
class EntityM;
class EntityD;
class EntityP;
class EntityN;
class EntityS;
class EntityR;
class EntityImp;

//
//	Entity Visitor Interface
//	For iterating all entities in the entity container or manage with a for each interface.
//
class TCOM_API  IEntityVisitor
{
public:
	virtual	~IEntityVisitor()	{}

	//
	//	visit player entity
	virtual bool visitP(EntityP& e)	= 0;

	//
	//	visit role entity
	virtual bool visitR(EntityR& e)	= 0;

	//	
	//	visit monster entity
	virtual bool visitM(EntityM& e) = 0;

	//
	//	visit destructible entity
	virtual bool visitD(EntityD& e) = 0;

	//
	//	visit static entity
	virtual bool visitS(EntityS& e) = 0;

	//
	//	visit NPC entity
	virtual bool visitN(EntityN& e) = 0;

	//	visit other entity
	virtual bool visit(EntityImp& e) = 0;
};

#endif
